# -*- coding: utf-8 -*-

"""
Description:
"""
import json
import re
import pandas as pd


def load_json_to_dict(file_path: str) -> dict:
    """
    读取`json`并转化为`dict`
    :param {str} file_path
    :return {*}
    """
    with open(file_path, "r", encoding="utf-8") as f:
        return json.load(f)


def save_dict_to_json(data: dict, file_path: str) -> None:
    """
    将`dict`转化为`json`并保存

    Args:
        data (dict): dict数据
        file_path (str): 保存目录
    """

    with open(file_path, "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False)
        print(f"Save {file_path} Success")


def excle_to_json(input_path: str, output_path: str, coluns: list[str]):
    """excle导出 json

    Args:
        input_path (str): 输入文件路径
        output_path (str): 输出文件路径
        coluns (list[str]): 导出指定列
    """
    df = pd.read_excel(input_path)
    new_df = df[coluns]

    # 导出到新的 Excel 文件
    new_df.to_json(output_path, orient="records", force_ascii=False)

    print(f"已成功导出指定列到{output_path}")


def excel_to_pronum(file_path, output_json_path):
    """
    导出 rj excle 中的规格编码

    Args:
        file_path (_type_): excle文件路径
        output_json_path (_type_): json文件输出路径
    """
    # 读取 Excel 文件, 忽略前两行
    df = pd.read_excel(file_path, engine="openpyxl", skiprows=2)

    # 检查数据框是否为空
    if df.empty:
        print("数据框为空, 无法处理.")
        return

    # 获取第一列数据并转换为列表
    first_column_data = df.iloc[:, 0].tolist()

    # 将列表导出为 JSON 格式
    with open(output_json_path, "w", encoding="utf-8") as json_file:
        json.dump(first_column_data, json_file, ensure_ascii=False, indent=4)

    print(f"第一列数据已成功导出到 {output_json_path}")


def generate_groups(elements, group_size=50):
    """
    生成器函数，按指定大小逐组产生元素

    :param elements: 要分组的元素列表
    :param group_size: 每组的大小，默认为50
    :return: 逐个返回每组元素
    """
    for i in range(0, len(elements), group_size):
        yield elements[i : i + group_size]


def excel_to_json_list(input_path: str, output_path: str) -> None:
    """
    将 Excel 文件转换为 JSON 列表，每一行为字典，key 为表头，value 为单元格值

    Args:
        input_path (str): Excel 文件路径
        output_path (str): 输出 JSON 文件路径
    """
    # 读取 Excel 文件
    df = pd.read_excel(input_path)

    # 将 DataFrame 转换为字典列表
    json_list = df.to_dict("records")

    # 保存为 JSON 文件
    with open(output_path, "w", encoding="utf-8") as f:
        json.dump(json_list, f, ensure_ascii=False, indent=4)

    print(f"已成功将 Excel 数据导出为 JSON 列表到 {output_path}")


def extract_quantity_and_unit(text):
    """提取数量和单位"""
    # 使用正则表达式匹配数字和单位
    # pattern = r"(\d+\.\d+|\d+\*\d+|\d+\-\d+|\d+|)(\D+)"
    pattern = r"(\d+\.\d+|\d+\*\d+|\d+\-\d+|\d+|)([a-zA-Z]+)"
    matches = re.findall(pattern, text.split("/")[0])
    if matches:
        # 获取第一个匹配项的数量和单位
        quantity, unit = matches[0]
        return quantity, unit
    return None, None


def extract_procode(pronum: str):
    """提取产品编码"""
    _list = pronum.split("-")
    if len(_list) > 1:
        code = "-".join(_list[:-1])
    else:
        code = _list[0]
    return code


def export_to_excel(data, filename, sheet_name='Sheet1'):
    """
    将数据导出到Excel文件
    
    参数:
    data: 要导出的数据，可以是列表、字典或DataFrame
    filename: 输出的Excel文件名（包含路径）
    sheet_name: Excel工作表名称
    """
    try:
        # 如果数据不是DataFrame，尝试转换为DataFrame
        if not isinstance(data, pd.DataFrame):
            df = pd.DataFrame(data)
        else:
            df = data
        
        # 导出到Excel
        with pd.ExcelWriter(filename, engine='openpyxl') as writer:
            df.to_excel(writer, sheet_name=sheet_name, index=False)
        
        print(f"数据已成功导出到 {filename}")
        return True
    
    except Exception as e:
        print(f"导出失败: {str(e)}")
        return False